package com.lh.utils;

import org.springframework.util.ObjectUtils;

import java.math.BigDecimal;
import java.text.NumberFormat;
import java.text.ParseException;
import java.util.Locale;

public class BigDecimalUtils {
    // ======================== 原有方法（保持不变）========================
    public static BigDecimal convertStringToBigDecimal(String valueStr, NumberFormat numberFormat) {
        if (ObjectUtils.isEmpty(valueStr)) {
            return BigDecimal.ZERO;
        }
        try {
            Number number = numberFormat.parse(valueStr.trim());
            return new BigDecimal(number.toString());
        } catch (ParseException e) {
            e.printStackTrace();
            return BigDecimal.ZERO;
        }
    }

    public static String formatBigDecimalToString(BigDecimal bigDecimal, boolean needThousandSeparator) {
        NumberFormat format = NumberFormat.getNumberInstance(Locale.US);
        format.setMaximumFractionDigits(1);
        format.setMinimumFractionDigits(1);
        format.setGroupingUsed(needThousandSeparator);
        return format.format(bigDecimal);
    }

    // ======================== 原有新增方法（保持不变）========================
    public static String formatAmount(BigDecimal bigDecimal, boolean needThousandSeparator) {
        NumberFormat format = NumberFormat.getNumberInstance(Locale.US);
        format.setMaximumFractionDigits(2);
        format.setMinimumFractionDigits(2);
        format.setGroupingUsed(needThousandSeparator);
        return format.format(bigDecimal);
    }

    public static String formatCount(BigDecimal bigDecimal) {
        NumberFormat format = NumberFormat.getNumberInstance(Locale.US);
        format.setMaximumFractionDigits(2);
        format.setMinimumFractionDigits(2);
        format.setGroupingUsed(false);
        return format.format(bigDecimal);
    }

    public static String calculateProportion(BigDecimal numerator, BigDecimal denominator) {
        if (denominator.compareTo(BigDecimal.ZERO) == 0) {
            return "0.0%";
        }
        BigDecimal proportion = numerator.divide(denominator, 4, BigDecimal.ROUND_HALF_UP)
                .multiply(new BigDecimal("100"));
        NumberFormat format = NumberFormat.getPercentInstance(Locale.US);
        format.setMaximumFractionDigits(1);
        format.setMinimumFractionDigits(1);
        return format.format(proportion.divide(new BigDecimal("100")));
    }

    // ======================== 新增个数整数格式化方法（当前需求专用）========================
    /**
     * 个数格式化：整数格式（取消小数点），无千位分隔符
     * @param bigDecimal 待转换的个数
     * @return 格式化后的个数字符串（如 "50"、"120"）
     */
    public static String formatCountAsInteger(BigDecimal bigDecimal) {
        NumberFormat format = NumberFormat.getNumberInstance(Locale.US);
        format.setMaximumFractionDigits(0); // 0位小数（整数）
        format.setMinimumFractionDigits(0);
        format.setGroupingUsed(false); // 不启用千位分隔符
        return format.format(bigDecimal);
    }
}